// 修复 webpack 5 entry 配置问题的插件
class FixWebpack5EntryPlugin {
  apply(compiler) {
    // 在编译开始前修复 entry 配置
    compiler.hooks.beforeRun.tap('FixWebpack5EntryPlugin', () => {
      if (typeof compiler.options.entry === 'function') {
        // 如果 entry 是函数，将其转换为对象格式
        const originalEntry = compiler.options.entry;
        compiler.options.entry = () => {
          return originalEntry().then(entry => {
            // 确保返回的是对象格式
            if (typeof entry === 'object' && entry !== null) {
              return entry;
            }
            // 如果不是对象，创建默认的 entry 对象
            return {
              'app': './src/main.js'
            };
          }).catch(() => {
            // 如果 Promise 失败，返回默认的 entry 对象
            return {
              'app': './src/main.js'
            };
          });
        };
      } else if (typeof compiler.options.entry !== 'object' || compiler.options.entry === null) {
        // 如果 entry 不是对象也不是函数，创建默认的 entry 对象
        compiler.options.entry = {
          'app': './src/main.js'
        };
      }
    });

    // 在编译初始化时确保 entry 正确配置
    compiler.hooks.initialize.tap('FixWebpack5EntryPlugin', () => {
      if (!compiler.options.entry) {
        compiler.options.entry = {
          'app': './src/main.js'
        };
      }
    });
  }
}

module.exports = FixWebpack5EntryPlugin;